![Amazon Lightsail でドメインリダイレクトを行ってみた](https://devio2023-media.developers.io/wp-content/uploads/2022/08/amazon-lightsail.png)
Amazon Lightsail でドメインリダイレクトを行ってみた
いわさです。
Lightsail で稼働している Web サイトに対してカスタムドメインを割り当てしている時に、任意のサブドメインすべてを特定のドメインへリダイレクトさせたいケースがあり、その方法を整理したので共有します。
前提
以下のような予測出来ない何らかのサブドメインへのリクエストの場合に有効なドメインへリダイレクトさせたいというのがゴールです。
- hoge1.example.com → example.com
- hoge2.example.com → example.com
前提として以下のように Lightsail で LAMP 環境を稼働させており、静的 IP アドレスのアタッチと DNS レコードの登録を行っています。
名前解決
まずサブドメインの名前解決方法ですが、こちらは簡単です。
今回は Lightsail DNS を使っていますが Lightsail DNS ではワイルドカードを使ったレコードが登録できるのでサブドメインに対する名前解決はどうにかなります。
ここでは指定可能な静的 IP アドレスを指定します。
ただし、これでサブドメインへアクセスした場合は目的のドメインと同じコンテンツが表示はされますが、リダイレクトはされずに hoge1.example.com として表示されます。
% curl -I http://hoge1010.tak1wa.com/ HTTP/1.1 200 OK : % curl -I http://aaa.hoge1010.tak1wa.com/ HTTP/1.1 200 OK
そこで、ここからリダイレクトの方法を考える必要があります。
Lightsail ロードバランサーではリダイレクトは処理出来ない
EC2 でホスティングされた Web サイトの場合だと ALB のリスナーでリダイレクトさせることが出来ます。
しかし、調べてみたところ Lightsail ロードバランサーでは詳細なリスナー構成を行うことが出来ません。
唯一リダイレクト構成可能なものは HTTP → HTTPS へのリダイレクトのみです。
こちらも半年近く前にようやくマネージドな機能として提供されるようになったものです。
Lightsail ディストリビューションでもリダイレクトは処理出来ない
次に Lightsail インスタンスの前段に配置出来るものといえばディストリビューションです。
こちらも念の為確認してみました。
こちらも非 Lightsail な CloudFormation などのように詳細なビヘイビアを定義することは出来ません。
可能なのは以下のようにキャッシュの有無と条件のみです。
ミドルウェアで行うことになる
結論としてはミドルウェアで処理するしかなさそうです。
今回は Bitnami の LAMP インスタンスを使っているのでバーチャルホストで定義をしてやろうと思います。
このあたりはお使いの環境にあわせて設定が必要です。
上記を参考に Bitnami 環境で VirtualHost を定義する手順を確認し、今回は SSL 構成前だったので/opt/bitnami/apache/conf/vhosts/*-vhost.conf
を作成して以下のように RewriteRule を追加しました。
bitnami@ip-172-26-13-21:/opt/bitnami/apache/conf/vhosts$ cat hoge-vhost.conf <VirtualHost *:80> ServerName hoge1010.tak1wa.com DocumentRoot /opt/bitnami/apache/htdocs </VirtualHost> <VirtualHost *:80> ServerName hoge1010.tak1wa.com ServerAlias *.hoge1010.tak1wa.com RewriteEngine On RewriteRule ^/(.*) http://hoge1010.tak1wa.com/$1 [R,L] </VirtualHost> bitnami@ip-172-26-13-21:/opt/bitnami/apache/conf/vhosts$ sudo /opt/bitnami/ctlscript.sh restart apache Restarted apache
追加後に再起動しリクエストを送信してみましょう。
% curl -I http://hoge1010.tak1wa.com/ HTTP/1.1 200 OK : % curl -I http://aaa.hoge1010.tak1wa.com/ HTTP/1.1 302 Found Location: http://hoge1010.tak1wa.com/
期待どおりリダイレクトされていますね。
さいごに
本日は Amazon Lightsail でドメインリダイレクトを行う方法を調べてみました。
HTTP → HTTPS のリダイレクトがインスタンス外で構成出来るようになっていたりと便利になっていますが、結論として Lightsail の場合はミドルウェアで頑張れという感じでした。
VPC ピアリングを使って非 Lightsail な ALB を用意してやる方法も出来そうですが、リダイレクトのためにそこまでやるかという感じはするので、ミドルウェアで対応するのが無難な感じだなぁというのがわかりました。